import axios from 'axios'
import store from '@/store/index';

export function request(config) {
    // 1.创建axios的实例
    const instance = axios.create({
        // baseURL:'http://112.124.17.86:8080',
        //baseURL:'http://10.150.200.104:8080',
        baseURL:'http://53sh8u.natappfree.cc',

        timeout:50000,
        headers: {
            // 'Content-Type': 'application/x-www-form-urlencoded'
            'Content-Type' : 'application/json',
        },
    })
    // 2.axios的拦截器
    // 2.1.请求拦截的作用
    instance.interceptors.request.use(
        config => {
            if (localStorage.getItem('ORDER_ACCESS_TOKEN')) {
                //token字段是要和后端协商好的
                // console.log(window.localStorage.getItem("ANSWER_ACCESS_TOKEN"))
                config.headers.common["ORDER_ACCESS_TOKEN"] = localStorage.getItem('ORDER_ACCESS_TOKEN');
                // debugger
            }
            return config
        },
        err => {
            return Promise.reject(err);
        });


    // 2.2.响应拦截
    instance.interceptors.response.use(
        response => {
            // 如果返回的状态码为200，说明接口请求成功，可以正常拿到数据
            // 否则的话抛出错误
            if (response.status === 200) {
                return Promise.resolve(response);

            } else {
                return Promise.reject(response);
            }
        },

        error => {
            if (error.response.status) {
                switch (error.response.status) {

                    case 401:
                        // 报错没有router
                        // router.replace({
                        //     path: '/login',
                        //     query: {
                        //         redirect: router.currentRoute.fullPath
                        //     }
                        // });
                        break;
                    // 403 token过期
                    // 登录过期对用户进行提示
                    // 清除本地token和清空vuex中token对象
                    // 跳转登录页面
                    case 403:
                        Toast({
                            message: '登录过期，请重新登录',
                            duration: 1000,
                            forbidClick: true
                        });
                        // 清除token
                        localStorage.removeItem('token');
                        store.commit('loginSuccess', null);
                        // 跳转登录页面，并将要浏览的页面fullPath传过去，登录成功后跳转需要访问的页面
                        setTimeout(() => {
                            router.replace({
                                path: '/login',
                                query: {
                                    redirect: router.currentRoute.fullPath
                                }
                            });
                        }, 1000);
                        break;
                    // 404请求不存在
                    case 404:
                        Toast({
                            message: '网络请求不存在',
                            duration: 1500,
                            forbidClick: true
                        });
                        break;
                    // 其他错误，直接抛出错误提示
                    default:

                }

                return Promise.reject(error.response);
            }
        }
);

    // 3.发送真正的网络请求
    return instance(config)
}
